# Laboratorio de Banco de Dados
#
# Script para gerar arquivos .sql para popular os bancos de dados
# Flavio Escobar e Efraim Zalmoxis
# 07/04/2010
# -------------------------------------------------------------------------
# Atualizado em 24/05/2010 - funcionando apenas para MySQL

import random

def main():
   mysql = open("mysql.sql", "w")
   #postgres = open("postgres.sql", "w")
   univ = open("universidades.txt", "r")
   alunos = open("alunos.txt", "r")
   profs = open("professores.txt", "r")
   matriculas = open("temp/matriculas.txt", "w") # as matriculas sao aleatorias, mas serao necessarias em outras tabelas
   cpfs = open("temp/cpfs.txt", "w") # mesma coisa de matriculas

   # tipo_projeto
   mysql.write("INSERT INTO project_types (descricao) VALUES('Projeto Final de Computacao');\n")
   mysql.write("INSERT INTO project_types (descricao) VALUES('Projeto Final de Matematica');")
   #postgres.write("INSERT INTO tipo_projeto (descricao) VALUES('Projeto Final de Computacao');\n")
   #postgres.write("INSERT INTO tipo_projeto (descricao) VALUES('Projeto Final de Matematica');")

   # filiacao
   num_filiacoes = 0
   texto = univ.readlines()
   for linha in texto:
      num_filiacoes = num_filiacoes+1
      mysql.write("\nINSERT INTO filiations (filiacao) VALUES('"+linha.strip()+"');")
      #postgres.write("\nINSERT INTO filiacao (filiacao) VALUES('"+linha.strip()+"');")

   # aluno
   matr = 0
   texto = alunos.readlines()
   for linha in texto:
      matr = matr + random.randint(1,100)
      matriculas.write(str(matr)+"\n") # anota a matricula, que serah necessaria depois
      mysql.write("\nINSERT INTO students (numero_matricula, nome) VALUES('"+str(matr)+"', '"+linha.strip()+"');")
      #postgres.write("\nINSERT INTO aluno (numero_matricula, nome) VALUES('"+str(matr)+"', '"+linha.strip()+"');")
   matriculas.close()

   # professor
   cpf = 0
   num_profs = 0
   siape = 0
   texto = profs.readlines()
   for linha in texto:
      num_profs+=1
      cpf = cpf + random.randint(1,100)
      siape = siape + random.randint(1,100)
      fil = str(random.randint(1,num_filiacoes)) # pega uma filiacao aleatoriamente
      cpfs.write(str(cpf)+"\n")
      mysql.write("\nINSERT INTO teachers (cpf, filiation_id, nome, siape) VALUES('"+str(cpf)+"', '"+fil+"', '"+linha.strip()+"', '"+str(siape)+"');")
      #postgres.write("\nINSERT INTO professor (cpf, id_filiacao, nome, siape) VALUES('"+str(cpf)+"', '"+fil+"', '"+linha.strip()+"', '"+str(siape)+"');")
   cpfs.close()

   # trabalho_final
   # Nao estah preenchendo nenhum campo que possa ser NULL, i.e., soh preenche os NOT NULL
   num_trab_final = 0
   matriculas = open("temp/matriculas.txt", "r")
   matr = matriculas.readlines()
   i=0
   for linha in matr: # aqui todos os \n serao retirados das matriculas
      matr[i] = matr[i].strip()
      i+=1
   cpfs = open("temp/cpfs.txt", "r")
   cpf = cpfs.readlines()
   i=0
   for linha in cpf: 
      cpf[i] = cpf[i].strip()
      i+=1
   for linha in matr:
		num_trab_final+=2
		tipo_proj = str(random.randint(1,2))
		orient = random.randint(0,i-1)
		co_orient = random.randint(0,i-1)
		while co_orient==i: # garantir que o orientador nao eh o co-orientador
			co_orient = random.randint(0,i-1)
		mysql.write("\nINSERT INTO final_works (student_id, project_type_id, teacher_id, co_orientador_cpf, ano_comeco, semestre_comeco, parte_projeto) VALUES('"+linha+"', '"+tipo_proj+"', '"+str(cpf[orient])+"', '"+str(cpf[co_orient])+"', '"+str(random.randint(2000,2005))+"', '"+str(random.randint(1,2))+"', '1');")
		mysql.write("\nINSERT INTO final_works (student_id, project_type_id, teacher_id, co_orientador_cpf, ano_comeco, semestre_comeco, parte_projeto) VALUES('"+linha+"', '"+tipo_proj+"', '"+str(cpf[orient])+"', '"+str(cpf[co_orient])+"', '"+str(random.randint(2006,2010))+"', '"+str(random.randint(1,2))+"', '2');")
      #postgres.write("\nINSERT INTO trabalho_final (aluno_numero_matricula, id_tipo_projeto, orientador_cpf, co_orientador_cpf, ano_comeco, semestre_comeco, parte_projeto) VALUES('"+linha+"', '"+tipo_proj+"', '"+str(cpf[orient])+"', '"+str(cpf[co_orient])+"', '"+str(random.randint(2000,2005))+"0301"+"', '"+str(random.randint(1,2))+"', 1);")
      #postgres.write("\nINSERT INTO trabalho_final (aluno_numero_matricula, id_tipo_projeto, orientador_cpf, co_orientador_cpf, ano_comeco, semestre_comeco, parte_projeto) VALUES('"+linha+"', '"+tipo_proj+"', '"+str(cpf[orient])+"', '"+str(cpf[co_orient])+"', '"+str(random.randint(2006,2010))+"0301"+"', '"+str(random.randint(1,2))+"', 2);")

   ## trabalho_final_pf1
   #id_trab=1
   #for linha in matr:
	#	mysql.write("\nINSERT INTO trabalho_final_pf1 (id_trabalho_final, resultado_pf1) VALUES('"+str(id_trab)+"', '"+str(random.randint(7,10))+"');")
	#	postgres.write("\nINSERT INTO trabalho_final_pf1 (id_trabalho_final, resultado_pf1) VALUES('"+str(id_trab)+"', '"+str(random.randint(7,10))+"');")
	#	id_trab+=2

   ## trabalho_final_pf2
   #id_trab=2
   #for linha in matr:
	#	mysql.write("\nINSERT INTO trabalho_final_pf2 (id_trabalho_final, resultado_pf2) VALUES('"+str(id_trab)+"', '"+str(random.randint(7,10))+"');")
	#	postgres.write("\nINSERT INTO trabalho_final_pf2 (id_trabalho_final, resultado_pf2) VALUES('"+str(id_trab)+"', '"+str(random.randint(7,10))+"');")
	#	id_trab+=2

   # banca
   for i in range(1,num_trab_final+1):
      mysql.write("\nINSERT INTO examining_boards (final_work_id, aprovado_colegiado) VALUES('"+str(i)+"', 'ND');")
      #postgres.write("\nINSERT INTO banca (id_trabalho_final, aprovado_colegiado) VALUES('"+str(i)+"', 'ND');")

   # professor_banca
   for i in range(1,num_trab_final+1):
      p1 = str(cpf[random.randint(0,num_profs-1)])
      p2 = str(cpf[random.randint(0,num_profs-1)])
      while p2==p1:
          p2 = str(cpf[random.randint(0,num_profs-1)])
      mysql.write("\nINSERT INTO board_teachers (teacher_id, examining_board_id) VALUES('"+p1+"', '"+str(i)+"');")
      mysql.write("\nINSERT INTO board_teachers (teacher_id, examining_board_id) VALUES('"+p2+"', '"+str(i)+"');")
      #postgres.write("\nINSERT INTO professor_banca (professor_cpf, id_banca) VALUES('"+p1+"', '"+str(i)+"');")
      #postgres.write("\nINSERT INTO professor_banca (professor_cpf, id_banca) VALUES('"+p2+"', '"+str(i)+"');")

   mysql.close()
   #postgres.close()

if __name__ == "__main__":
    main()
